# 某个人的身高、体重、BMI指数及BMI分类编号
mutable struct Person
  height       # 身高，单位米
  weight      # 体重，单位千克
  bmi         # 计算得到的BMI指数
  class        # 根据BMI指数计算得到的分类标识
              # 1-体重过低，2-正常范围，3-肥胖前期，4-I度肥胖，5-II度肥胖，6-III度肥胖
end

# 定义一个集合结构，记录1000个人的样本
people = Set{Person}()

# 使用均匀分布生成1000个体型样本数据，并放在集合people中
for i = 1:1000
  h = rand() * (1.8-1.5)+1.5        # 生成身高数据，并将其映射到[1.5, 1.8)区间
  w = rand() * (100-30)+30          # 生成体重数据，并将其映射到[30, 100)区间
  p = Person(h, w, 0, 0)            # 基于身高与体重数据创建Person对象p，BMI指数和分类编号均初始化为无效的0值

  push!(people, p)                  # 将对象放入集合people中
end

# 对BMI指数进行分类
# 1-体重过低，2-正常范围，3-肥胖前期，4-I度肥胖，5-II度肥胖，6-III度肥胖
function bmi_category(index::Float64)
  class = 0
  if index < 18.5
     class = 1
  elseif index < 24
     class = 2
  elseif index < 28
     class = 3
  elseif index < 30
     class = 4
  elseif index < 40
     class = 5
  else
     class = 6
  end
  
  class            # 返回分类编号
end

# 计算BMI指数并计算分类编号
function bmi(p::Person)
    p.bmi = p.weight/(p.height^2)
    p.class = bmi_category(p.bmi)
end

# 对1000个样本执行BMI计算，并统计分布
categories = Dict()
for p ∈ people
   bmi(p)
   categories[p.class] = get(categories, p.class, 0) + 1
end

# 直接列出变量名以打印其内容
categories